/*

第一步：设计和实现以下类

    （1）手机卡类 特征：卡类型、卡号、用户名、密码、账户余额、通话时长(分钟)、上网流量 行为：显示（卡号 + 用户名 + 当前余额）

    （2）通话套餐类 特征：通话时长、短信条数、每月资费 行为: 显示所有套餐信息     （3）上网套餐类 特征：上网流量、每月资费 行为：显示所有套餐信息

    （4）用户消费信息类 特征：统计通话时长、统计上网流量、每月消费金额

    3.2 第二步：设计和实现以下枚举类 手机卡的类型总共有 3 种：大卡、小卡、微型卡

    3.3 第三步：实体类的优化 将通话套餐类和上网套餐类中相同的特征和行为提取出来组成抽象套餐类。

    3.4 第四步：创建并实现以下接口

    （1）通话服务接口 抽象方法: 参数1: 通话分钟, 参数2: 手机卡类对象 让通话套餐类实现通话服务接口。

    （2）上网服务接口 抽象方法: 参数1: 上网流量, 参数2: 手机卡类对象 让上网套餐类实现上网服务接口。
*/
//测试类
public class Test {
    public static void main(String[] args) {
        System.out.println("\n====================注册卡==========================");
        // 定义通话套餐数量与资费         1元/分钟             通话时长150分钟          短信数量100条
        CallPackage call = new CallPackage(1, 150, 100);
        // 定义上网套餐与资费             1元/GB              流量包20GB
        NetworkPackage network = new NetworkPackage(1, 20);
        // 消费统计对象
        UserConsumeInfo uci = new UserConsumeInfo();
        // 注册一张手机卡  类型：小卡
        PhoneCard card = new PhoneCard(CardType.SMALL.getCardType(), "123456789110",
                "lagou", "*********", 500, call.getPhonePackage(),
                network.getPhonePackage(), uci);
        // 多态：打印套餐信息：抽象套餐类->通话套餐、上网套餐
        card.showOnCreate(call, network);
        System.out.println("====================================================\n\n");
        // 开始消费
        System.out.println("\n=======================使用通话======================\n");
        call.server(30, card);
        System.out.println("\n====================================================\n\n");

        System.out.println("\n=======================使用流量======================\n");
        network.server(100, card);
        System.out.println("\n====================================================");


    }

}
